/*
 * Copyright (c) 2012 SUBSECRETARIA DEFENSORIA DEL ESPACIO PUBLICO - SDEP.
 * All Rights Reserved.
 * This software is the confidential and proprietary information of SDEP
 * Developed By CONSTULT-SOFT S.A, Development Team 2012.
 * 
 */
package co.gov.medellin.sdep.sisdep.model.dao.impl;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.springframework.transaction.PlatformTransactionManager;

import co.gov.medellin.sdep.sisdep.common.OracleHelper;
import co.gov.medellin.sdep.sisdep.model.ModuloDiseno;
import co.gov.medellin.sdep.sisdep.model.dao.ModuloDisenoDAOImpl;


/**
 * <p>
 * Implementacion de los metodos especializados de acceso a datos, necesarios para la gestion de Disenios de Modulos de los 
 * comerciantes en SISDEP.
 * </p>
 * <p>
 * Copyright (c) 2012<BR>
 * Consult-Soft S.A.<BR>
 * Created on: May 09, 2012<BR>
 * 
 * @author atabares
 * </p>
 */
public class ModuloDisenoDAOTImpl extends ModuloDisenoDAOImpl implements IModuloDisenoDAOT {

	/** Manejador de transacciones para ModuloDAOTImpl. */
	private PlatformTransactionManager transactionManager;
	
	/**
	 * constructor por defecto
	 */
	public ModuloDisenoDAOTImpl() {
	}

	/**
	 * Retorna el transactionManager.
	 * @return
	 */
	public PlatformTransactionManager getTransactionManager() {
		return transactionManager;
	}

	/**
	 * Establece el transaction manager establecido en la configuracion.
	 * @param transactionManager
	 */
	public void setTransactionManager(PlatformTransactionManager transactionManager) {
		this.transactionManager = transactionManager;
	}

	
	/* (non-Javadoc)
	 * @see co.gov.medellin.sdep.sisdep.model.dao.impl.IModuloDisenoDAOT#getModuloDisenoListByCriteria(co.gov.medellin.sdep.sisdep.model.ModuloDiseno)
	 */
	public List getModuloDisenoListByCriteria(ModuloDiseno moduloDiseno) {
		
		StringBuffer query = new StringBuffer();
		
		query.append("SELECT DISTINCT MODUDIS.ID, MODUDIS.CODIGO, MODUDIS.ESTILO, ");
		query.append("VLRTPO.VRT_NOMBRE, MODUDIS.PLANO, MODUDIS.DIM_ANCHO_LARGO ");
		query.append("FROM GES_MODULO_DISENO_T MODUDIS ");
		query.append("JOIN ADM_VALOR_TIPO_MAESTRA_T VLRTPO ON MODUDIS.ID_MATERIAL = VLRTPO.ID_VALOR_TIPO ");
		
		if (!OracleHelper.isNullorEmpty(moduloDiseno.getCodigo())) {
            query.append("AND MODUDIS.CODIGO = ? ");
        }
		
		if (moduloDiseno.getIdMaterial() != null) {
            query.append("AND MODUDIS.ID_MATERIAL = ? ");
        }
		
		query.append(" ORDER BY MODUDIS.CODIGO");
		
		List params = new ArrayList();
		
		if (!OracleHelper.isNullorEmpty(moduloDiseno.getCodigo())) {
			params.add(moduloDiseno.getCodigo());
        }
		
		if (moduloDiseno.getIdMaterial() != null) {
            params.add(moduloDiseno.getIdMaterial());
        }
				
    	List rows = this.getJdbcTemplate().queryForList(query.toString(), params.toArray());
		
    	List moduloDisenoList = new ArrayList();
    	Iterator iterator = rows.iterator();
    	
    	while (iterator.hasNext()) {
    		Map moduloDisenoMap = (Map) iterator.next();
    		
    		ModuloDiseno moduloDisenoTemp = new ModuloDiseno();
    		
    		moduloDisenoTemp.setId(new Long(((BigDecimal) moduloDisenoMap.get("ID")).longValue()));
			moduloDisenoTemp.setCodigo((String) moduloDisenoMap.get("CODIGO"));
			moduloDisenoTemp.setEstilo((String) moduloDisenoMap.get("ESTILO"));
			moduloDisenoTemp.setMaterial((String) moduloDisenoMap.get("VRT_NOMBRE"));
			moduloDisenoTemp.setPlano((String) moduloDisenoMap.get("PLANO"));
			moduloDisenoTemp.setDimAnchoLargo((String) moduloDisenoMap.get("DIM_ANCHO_LARGO"));
			
			moduloDisenoList.add(moduloDisenoTemp);
    	}
		
		return moduloDisenoList;
	}

}
